home *** CD-ROM | disk | FTP | other *** search
- NUL EQU 0
- TAB EQU 9
- LF EQU 10
- CR EQU 13
-
- STDIN EQU 0
- STDOUT EQU 1
- STDERR EQU 2
- STDAUX EQU 3
- STDPRN EQU 4
-
-
- PSP STRUC
- INTVECT DW ?
- TOM DW ?
- RES1 DB ?
- DOSLONG DB 5 DUP (?)
- TERMINA DD ?
- CTRLBRK DD ?
- CRITERR DD ?
- DOS1 DB 22 DUP (?)
- ENVIRO DW ?
- DOS2 DB 46 DUP (?)
- FPA1 DB 16 DUP (?)
- FPA2 DB 20 DUP (?)
- UPA DB 128 DUP (?)
- PSP ENDS
-
- DTA STRUC
- DOS3 DB 21 DUP (?)
- ATTRIB DB
- TIME DW
- DATE DW
- LSIZE DW
- HSIZE DW
- FNAME DB 13 DUP (?)
- DTA ENDS
-
- EXECDEF STRUC
- NENVIRO DW
- COMMND DW 2 DUP (0)
- FCB5CH DW 2 DUP (0)
- FCB6CH DW 2 DUP (0)
- EXECDEF ENDS
-
- SCANPARAM MACRO P1,P2
- LOCAL SC1
- MOV AL,' '
- JCXZ P2
- REPE SCASB
- JCXZ P2
- MOV P1,DI
- DEC P1
- REPNE SCASB
- JCXZ SC1
- DEC DI
- SC1: MOV BYTE PTR [DI],NUL
- INC DI
- ENDM
-
- MSCANSWITCH MACRO
- SCANSWITCH:
- ???
- RET
- ENDM
-
- MSCANARGS MACRO
- LOCAL DEND,ARGBUF,ERR1,NXT0,NXT1,NXT2,NXT3,NXT4,NXT5,SPACE
- SCANARGS:
- MOV ARGC,0
- CLD
- MOV DI,OFFSET ARGBUF
- MOV SI,OFFSET UPA
- LODSB ; Skip past length
- ; ch = getch();
- LODSB
- NXT0: ; loop {
- ; while (ch == ' ') ch = getch();
- SPACE: CMP AL,' '
- JNE NXT1
- LODSB
- JMP SPACE
- NXT1: ; break when (ch == \nl)
- CMP AL,CR
- JE DEND
- ; argv[argc++] = &buff[i];
- MOV BX,ARGC
- SAL BX,1
- INC ARGC
- MOV ARGV[BX],DI
- ; if (ch == '"') {
- CMP AL,'"'
- JNE NXT2
- ; ch = getch();
- LODSB
- CMP AL,CR
- JE ERR1
- ; loop {
- NXT3: ; while (ch != '"') { putch(ch); ch = getch(); }
- CMP AL,'"'
- JE NXT4
- STOSB
- LODSB
- CMP AL,CR
- JE ERR1
- JMP NXT3
- NXT4: ; ch = getch();
- LODSB
- ; break when (ch != '"');
- CMP AL,'"'
- JNE NXT5
- ; putch(ch);
- STOSB
- ; ch = getch();
- LODSB
- CMP AL,CR
- JE ERR1
- ; }
- JMP NXT3
- NXT2: ; } else
- ; while (ch != ' ' && ch != '"' && ch != \nl) {
- CMP AL,' '
- JE NXT5
- CMP AL,'"'
- JE NXT5
- CMP AL,CR
- JE NXT5
- ; putch(ch);
- STOSB
- ; ch = getch();
- LODSB
- ; No error here if we get the CR
- ; }
- JMP NXT2
- ; }
- NXT5: ; putch(\nul);
- MOV AH,AL
- MOV AL,NUL
- STOSB
- MOV AL,AH
- ; }
- JMP NXT0
- DEND: RET
- ERR1: MOV AL,20
- JMP ERROR
- EVEN
- ARGC DW 0
- ARGV DW 32 DUP (0)
- ARGBUF DB 128 DUP (0)
- ENDM
-
- MSKIPWHITE MACRO
- LOCAL NXT1,NXT2
- SKIPWHITE:
- CMP BYTE PTR [SI],' '
- JE NXT1
- CMP BYTE PTR [SI],TAB
- JNE NXT2
- NXT1: INC SI
- DEC CX
- JCXZ NXT2
- JMP SKIPWHITE
- NXT2: RET
- ENDM
-
- MCOPYSTR MACRO
- LOCAL ERR1,SPACE,NXT1
- COPYSTR:
- PUSH DS
- POP ES
- JCXZ ERR1
- PUSH CX
- PUSH DI
- MOV DI,SI
- REPNE SCASB
- POP DI
- MOV AX,CX
- POP CX
- PUSH AX
- SUB CX,AX
- REP MOVSB
- MOV BYTE PTR [DI-1],NUL
- POP CX
- RET
- ERR1: MOV AL,20
- JMP ERROR
- ENDM
-
- MSKIPSTR MACRO
- LOCAL ERR1
- SKIPSTR:
- PUSH DS
- POP ES
- PUSH DI
- MOV DI,SI
- JCXZ ERR1
- REPNE SCASB
- MOV SI,DI
- POP DI
- RET
- ERR1: MOV AL,20
- JMP ERROR
- ENDM
-
- MREPLACE MACRO
- LOCAL NXT1
- REPLACE:
- REPNE SCASB
- JNE NXT1
- MOV BYTE PTR [DI-1],AH
- JMP REPLACE
- NXT1: RET
- ENDM
-
- MSETSWITCH MACRO
- SETSWITCH:
- ; NEW SWITCH IN DL
- MOV AH,37H ; INTERNAL CALL GET SWITCHAR
- MOV AL,1 ; 1 = SET SWITCHAR ??
- INT 21H
- RET
- ENDM
-
- MGETSWITCH MACRO
- GETSWITCH:
- MOV AH,37H ; INTERNAL CALL GET SWITCHAR
- MOV AL,0 ; 1 = SET SWITCHAR ??
- INT 21H
- ; SWITCH IN DL
- RET
- ENDM
-
- MCMPDATE MACRO
- LOCAL CMP1
- CMPDATE:
- ; DX:CX ? ES:DI
- MOV AX,ES
- CMP AX,DX
- JNZ CMP1
- CMP DI,CX
- CMP1: RET
- ENDM
-
- MREAD MACRO
- LOCAL ERR1
- READ:
- MOV AH,3FH
- INT 21H
- JC ERR1
- RET
- ERR1: JMP ERROR
- ENDM
-
- MSHRINKSPACE MACRO
- LOCAL ERR1
- SHRINKSPACE:
- MOV AH,4AH
- INT 21H
- JC ERR1
- RET
- ERR1: JMP ERROR
- ENDM
-
- MOPEN MACRO
- LOCAL ERR1
- OPEN:
- MOV AH,3DH
- INT 21H
- JC ERR1
- RET
- ERR1: JMP ERROR
- ENDM
-
- MCLOSE MACRO
- LOCAL ERR1
- CLOSE:
- MOV AH,3EH
- INT 21H
- JC ERR1
- RET
- ERR1: JMP ERROR
- ENDM
-
- MGETDATE MACRO
- LOCAL ERR1
- GETDATE:
- MOV AH,57H
- MOV AL,0
- INT 21H
- JC ERR1
- RET
- ERR1: JMP ERROR
- ENDM
-
- MEXECOMM MACRO
- LOCAL EXECBLK,ERR1,SPSAVE,SSSAVE
- EXECOMM:
- PUSH AX
- PUSH BX
- PUSH CX
- PUSH DX
- PUSH SI
- PUSH DI
- PUSH BP
- PUSH DS
- PUSH ES
- MOV SPSAVE,SP
- MOV SSSAVE,SS
- MOV EXECBLK.NENVIRO,0
- MOV EXECBLK.COMMND[0],DX
- MOV EXECBLK.COMMND[2],DS
- MOV AX,CS
- MOV ES,AX
- MOV BX,OFFSET EXECBLK
- XOR BP,BP
- MOV AX,[BP].ENVIRO
- MOV DS,AX
- MOV DX,8
- MOV AH,4BH
- MOV AL,0
- INT 21H
- MOV SS,CS:SSSAVE
- MOV SP,CS:SPSAVE
- POP ES
- POP DS
- POP BP
- POP DI
- POP SI
- POP DX
- POP CX
- POP BX
- POP AX
- JC ERR1
- RET
- ERR1: JMP ERROR
- EVEN
- EXECBLK EXECDEF <>
- SPSAVE DW
- SSSAVE DW
- ENDM
-
- MFIRSTFILE MACRO
- ENDM
-
- MNEXTFILE MACRO
- NEXTFILE:
- MOV AH,4FH
- INT 21H
- RET
- ENDM
-
- MWRITEINT MACRO
- LOCAL OUT,RECRS,TEMPBUF
- FWRITEINT:
- PUSH SI
- PUSH DX
- PUSH DI
- MOV DI,OFFSET TEMPBUF
- MOV SI,10
- CALL RECRS
- MOV BYTE PTR [DI],NUL
- MOV DX,OFFSET TEMPBUF
- CALL FWRITESTR
- POP DI
- POP DX
- POP SI
- RET
- RECRS: TEST AX,AX
- JZ OUT
- XOR DX,DX
- DIV SI
- PUSH DX
- CALL RECRS
- POP AX
- ADD AL,'0'
- STOSB
- OUT: RET
- TEMPBUF DB 12 DUP (0)
- ENDM
-
- MWRITESTR MACRO
- FWRITESTR:
- PUSH AX
- PUSH DI
- PUSH CX
- MOV DI,DX
- MOV CX,32767
- MOV AL,NUL
- REPNE SCASB
- SUB CX,32767
- NEG CX
- DEC CX
- MOV AH,40H
- INT 21H
- POP CX
- POP DI
- POP AX
- RET
- ENDM
-
- MWRITELN MACRO
- LOCAL CRLF
- FWRITELN:
- PUSH CX
- PUSH DX
- PUSH AX
- MOV DX,OFFSET CRLF
- MOV CX,2
- MOV AH,40H
- INT 21H
- POP AX
- POP DX
- POP CX
- RET
- CRLF DB CR,LF
- ENDM
-
- MNORMAL MACRO
- NORMAL:
- MOV AL,0
- MOV AH,4CH
- INT 21H
- ENDM
-
-
- MKERR MACRO P1,P2
- ERR&P1 DB P2,NUL
- ENDM
-
- ERRSTR MACRO P1
- MKERR %ERRLB,P1
- ERRLB = ERRLB + 1
- ENDM
-
- ERRLBL MACRO P1
- DW ERR&P1
- ENDM
-
- MERROR MACRO
- ERROR: XOR AH,AH
- PUSH AX
- MOV BX,AX
- SAL BX,1
- MOV DX,ERRTABLE[BX]
- MOV BX,STDERR ; Standard error
- CALL FWRITESTR
- CALL FWRITELN
- POP AX ; Get the error number
- MOV AH,4CH
- INT 21H ; Return to host program
-
- ERRLB = 0
- ERRSTR 'Internal error' ; 0
- ERRSTR 'Invalid function number' ; 1
- ERRSTR 'File not found' ; 2
- ERRSTR 'Path not found' ; 3
- ERRSTR 'Too many open files' ; 4
- ERRSTR 'Access denied' ; 5
- ERRSTR 'Invalid handle' ; 6
- ERRSTR 'Memory control blocks destroyed' ; 7
- ERRSTR 'Insufficient memory' ; 8
- ERRSTR 'Invalid memory block address' ; 9
- ERRSTR 'Invalid environment' ; 10
- ERRSTR 'Invalid format' ; 11
- ERRSTR 'Invalid access code' ; 12
- ERRSTR 'Invalid data' ; 13
- ERRSTR '*** UNSPECIFIED ***' ; 14
- ERRSTR 'Invalid drive was specified' ; 15
- ERRSTR 'Attempted to remove current directory' ; 16
- ERRSTR 'Not same device' ; 17
- ERRSTR 'No more files' ; 18
- ERRSTR 'Invalid number of parameters' ; 19
- ERRSTR 'Syntax error' ; 20
-
- ERRX = 1
-
- ERRTABLE DW ERR0
- REPT ERRLB-1
- ERRLBL %ERRX
- ERRX = ERRX + 1
- ENDM
-
- ENDM